<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 双指针方法
      // 定义两个数组
      const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
      const arr1 = [1, 5, 9, 3, 6, 112, 185, 45];

      // 封装求公共元素的函数
      function publicElement(arr, arr1) {
        // 将数组从小到大进行排序
        arr = arr.sort((a, b) => a - b);
        arr1 = arr1.sort((a, b) => a - b);
        // 定义两个指针指向两个数组的开头
        let left = 0,
          right = 0;
          // 定义一个空的数组用于承载公共元素
        let err = [];
        // 使用while循环
        while (left < arr.length && right < arr1.length) {
          // 如果两个数组的值相同，就将那个值加入到数组中
          if (arr[left] === arr1[right]) {
            err.push(arr[left]);
            // 从下一项开始继续执行
            left++;
            right++;
            // 如果left的值大于right的值，说明right前面没有相同的值了，left逻辑相同
          } else if (arr[left] > arr1[right]) {
            right++;
          } else {
            left++;
          } 
        }
        // 将数组return出去
        return err;
      }

      console.log(publicElement(arr, arr1));
    </script>
  </body>
</html>
